﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;

namespace SimpleExpression
{
    public abstract class QueryPlanBase
    { 
        protected EntityExpression expression;
        protected ExpressionVisitor visitor;
       
        public QueryPlanBase()
        {
            
        }

        protected EntityExpression EntityExpression
        {
            get { return this.expression; }
            set { this.expression = value; }
        }

        protected ExpressionVisitor ExpressionVisitor
        {
            get { return this.visitor; }
            set { this.visitor = value; }
        }

        public virtual void GetResult()
        {
            this.expression.Accept(this.visitor);
        }

        /// <summary>
        /// Command puede ser un string o un IDbCommand
        /// Para el caso de la clase QueryPlanSQL se sobreescribe la propiedad para hacer la validacion contra el commandText
        /// </summary>
        public abstract object Command { get; }
    }
}
